<?php
/**
 * 自定义json响应类.
 *
 * 返回规定格式的json信息
 *
 * @author zhou
 *
 * @since  1.0
 */

namespace think\response;

class Myjson extends Json
{
    // 输出参数
    protected $options = null;

    /**
     * 处理数据.
     *
     * @param mixed $data 要处理的数据
     *
     * @return mixed
     *
     * @throws \Exception
     */
    protected function output($data)
    {
        // 默认值
        $code = 'success';
        $msg = lang('success');
        $result = [];

        // 格式化
        if ((!empty($data) && is_string($data)) || (count($data) === 2 && isset($data[0]) && is_string($data[0]) && is_array($data[1]))) {
            $code = is_string($data) ? trim($data) : trim($data[0]);

            // 加载相应模块语言包
            if (strpos($code, '.') !== false) {
                $code_arr = explode('.', $code);
                \think\Lang::load(str_replace(['/', '\\'], DS, APP_PATH.$code_arr[0].'\lang\zh-cn.php'));
            }

            $param = [];
            if (is_array($data)) {
                $param = $data[1];
            }

            $msg = lang($code, $param);
        } elseif (is_array($data)) {
            $result = $data;
        } else {
            exception('不是有效的返回结果');
        }

        // 组装
        $data = [
            'code' => $code,
            'msg' => $msg,
            'result' => (object) $result,
        ];

        // 返回格式化的JSON数据
        return parent::output($data);
    }
}
